package edu.ynu.se.xiecheng.achitectureclass.entity;

import edu.ynu.se.xiecheng.achitectureclass.common.entity.LogicEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Set;

/**
 * 用户实体类
 * 用于存储系统用户信息，包括管理员和普通用户
 */
@Data
@Entity
@Table(name = "user")
@EqualsAndHashCode(callSuper = true)
public class User extends LogicEntity {
    @Column(unique = true, nullable = false)
    private String username;

    /**
     * 密码
     * 存储加密后的用户密码
     */
    @Column(nullable = false)
    private String password;

    /**
     * 姓名
     * 用户的真实姓名或显示名称
     */
    private String name;

    /**
     * 用户角色集合
     * 存储用户的角色信息，如：ROLE_ADMIN（管理员）、ROLE_USER（普通用户）
     * 使用Set确保角色不重复，EAGER加载确保获取用户信息时同时加载角色信息
     */
    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"))
    @Column(name = "role")
    private Set<String> roles;

    /**
     * 最后登录时间
     * 记录用户最近一次成功登录的时间
     */
    @Column(name = "last_login_time")
    private LocalDateTime lastLoginTime;

    /**
     * 账号状态
     * true: 启用状态
     * false: 禁用状态
     */
    @Column(nullable = false, columnDefinition = "boolean default true")
    private boolean enabled = true;
}